import java.io.File;
import java.io.FilenameFilter;
import java.util.ArrayList;

import uteis.serializador;
import entidades.*;

public class base_dados implements FilenameFilter
{
	public base_dados()
	{
		this.produtos = new lista_entidades<produto>();
		this.clientes = new lista_entidades<cliente>();
		this.transportadoras = new lista_entidades<transportadora>();
		
		this.carregar_dados();
	}

	public lista_entidades<produto> produtos;
	public lista_entidades<cliente> clientes;
	public lista_entidades<transportadora> transportadoras;


	private void carregar_dados()
	{
		File diretorio = new File(serializador.diretorio_dados);
		
		ArrayList<pedido> temp_lista_pedidos = new ArrayList<pedido>();
		
		for(String nome_arquivo : diretorio.list(this))
		{
			serializador s = new serializador(nome_arquivo);
		
			Object o = s.carregar();
			
			if(o.getClass() == produto.class)
			{
				this.produtos.add((produto)o);
			}
			else if(o.getClass() == cliente.class)
			{
				this.clientes.add((cliente)o);
			}
			else if(o.getClass() == transportadora.class)
			{
				this.transportadoras.add((transportadora)o);
			}
			else if(o.getClass() == pedido.class)
			{
				temp_lista_pedidos.add((pedido)o);
			}
		}

		try 
		{
			for(cliente c : this.clientes)
			{
				for(pedido p : temp_lista_pedidos)
				{
					if(p.get_cliente().get_id() == c.get_id())
					{
						c.get_pedidos().add(p);
	
						p.set_cliente(c);
					}
				}
				
				for(pedido p : c.get_pedidos())
				{
					temp_lista_pedidos.remove(p);
				}
			}
		} catch(Exception exc) 
		{ 
		}
	}

	@Override
	public boolean accept(File _arquivo, String _nome_arquivo)
	{			
		return _nome_arquivo.contains(serializador.separador_arquivo_dados)
				&& _nome_arquivo.endsWith(serializador.extensao_arquivo_dados);
	}
}
